<?php
/*
 * @开发工具: JetBrains PhpStorm.
 * @文件名：Task.class.php
 * @类功能: Task框架入口文件
 * @开发者: zc
 * @开发时间： 15-10-22
 * @版本：version 1.0
 */
class Task{
    //类映射关系
    private static $_map = array();

    //设置常理
    private static $_short_opts = "h:s:l:c:";         //接收短linux参数格式
    private static $_long_opts = array("help","reload"); //接收长linux参数格式

    /**
     * @功能：动态加载任务处理方法
     * @param $class string 处理方法名称
     * @开发者: zc
     * @return mixed
     */
    private static function autoload($class){
        //取得文件地址
        $path = ROOT_PATH."/Application/Common/Extend/Timing/Library/{$class}/class.php";

        //判断文件是否存在
        if(!is_file($path)){
            //写日志文件
            Log::write("加载文件失败1！");

            //返回错误
            return false;
        }

        //加载文件
        return include($path);
    }

    /**
     * @功能：注册类库载入路径
     * @开发者：zc
     */
    public static function spl_autoload_register(){
        //注册类库载入
        spl_autoload_register(function($name) {
            //检查是否存在映射
            if(!empty(self::$_map[$name])) {
                return true;
            }

            //取得文件地址
            $path = ROOT_PATH."/app/Common/Extend/Timing/Library/{$name}.class.php";

            //判断文件是否存在
            if(!is_file($path)){
                //写日志文件
                Log::write("加载文件失败！");

                //返回错误
                return false;
            }

            //设置状态
            self::$_map[$name] = true;

            //加载文件
            return include($path);
        });
    }

    /**
     * @功能：Task运行框架入口文件
     * @开发者：zc
     */
    public static function run(){
        //获取linux参数
        $opts = getopt(self::$_short_opts, self::$_long_opts);

        //注册动态加载函数
        self::spl_autoload_register();

        //解析进程操作命令
        self::start($opts);
    }

    /**
     * 解析启动模式参数
     * @param $opt array 操作
     */
    private static function start($opt){
        //取得存在参数
        $status = strtolower($opt["s"]);

        //判断参数参数是否正确
        if (empty($status) || !in_array($status, array("start", "stop"))) {
            //输出帮助内容
            die("Usage: /path/to/php main.php -s start | stop\n");
        }

        //判断存在类型
        if($status == "start"){
            TaskBase::start();
        }else {
            TaskBase::stop();
        }
    }
}

//加载配置文件
require ROOT_PATH."app/Common/Extend/Timing/Function/functions.class.php";
require ROOT_PATH."app/Common/Extend/Timing/Library/Log.class.php";

//运行
Task::run();